package com.eksframework.commons.core.tuple;

import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;

/**
 * TupleThree
 *
 * @author: chenfenghai
 * @version: 1.0
 * @date: 2020-12-23 9:43
 */
@Data
@EqualsAndHashCode
@ToString
public class TupleThree<A, B, C> {

    /**
     * 元组1
     */
    private A first;

    /**
     * 元组2
     */
    private B second;

    /**
     * 元组3
     */
    private C third;

    /**
     * 私有构造
     */
    private TupleThree() {
    }

    /**
     * 私有构造
     *
     * @param first  元组1
     * @param second 元组2
     * @param third  元组3
     */
    private TupleThree(A first, B second, C third) {
        this.first = first;
        this.second = second;
        this.third = third;
    }

    /**
     * 实例化对象
     *
     * @param <A> 元组1类型
     * @param <B> 元组2类型
     * @param <C> 元组3类型
     * @return 元组实例
     */
    public static <A, B, C> TupleThree<A, B, C> of() {
        return new TupleThree<>();
    }

    /**
     * 实例化对象
     *
     * @param first  元组1
     * @param second 元组2
     * @param third  元组3
     * @param <A>    元组1类型
     * @param <B>    元组2类型
     * @param <C>    元组3类型
     * @return 元组实例
     */
    public static <A, B, C> TupleThree<A, B, C> of(A first, B second, C third) {
        return new TupleThree<>(first, second, third);
    }
}
